package com.loma.common.base

import android.app.Application
import com.alibaba.android.arouter.launcher.ARouter
import com.drake.brv.BindingAdapter
import com.drake.statelayout.StateConfig
import com.loma.common.BR
import com.loma.common.BuildConfig
import com.loma.common.R
import com.loma.common.model.http.RxHttpManager
import com.loma.common.utils.ext.showToast
import com.loma.common.utils.util.OKHttpUpdateHttpService
import com.loma.common.utils.util.isMainProcess
import com.scwang.smart.refresh.footer.ClassicsFooter
import com.scwang.smart.refresh.header.MaterialHeader
import com.scwang.smart.refresh.layout.SmartRefreshLayout
import com.tencent.bugly.crashreport.CrashReport
import com.tencent.mmkv.MMKV
import com.xuexiang.xupdate.XUpdate
import com.xuexiang.xupdate.entity.UpdateError.ERROR.CHECK_NO_NEW_VERSION
import com.xuexiang.xupdate.utils.UpdateUtils


/**
 * Created by xiaojianjun on 2019-07-15.
 */
open class BaseApp : Application() {

    companion object {
        lateinit var instance: BaseApp
    }

    override fun onCreate() {
        super.onCreate()
        initUpdate()
        instance = this
        BindingAdapter.modelId = BR.m
        // 主进程初始化
        if (isMainProcess(this)) {
            CrashReport.initCrashReport(applicationContext, "d722dc3f31", false);
            init()
            RxHttpManager.init(this);
        }

    }

    fun initUpdate() {
        XUpdate.get()
            .debug(true)
            .isWifiOnly(false) //默认设置只在wifi下检查版本更新
            .isGet(false) //默认设置使用get请求检查版本
            .isAutoMode(false) //默认设置非自动模式，可根据具体使用配置
            .param("versionCode", UpdateUtils.getVersionCode(this)) //设置默认公共请求参数
            .param("appKey", packageName)
            .setOnUpdateFailureListener { error ->

                //设置版本更新出错的监听
                error.printStackTrace()
                if (error.code != CHECK_NO_NEW_VERSION) {          //对不同错误进行处理
                    showToast(error.toString())
                }
            }
            .supportSilentInstall(false) //设置是否支持静默安装，默认是true
            .setIUpdateHttpService(OKHttpUpdateHttpService()) //这个必须设置！实现网络请求功能。
            .init(this) //这个必须初始化
    }

    private fun init() {

//        JPush.registerToken(this,onResult = {
//            if (it) JPush.turnOnPush(this)
//        })



        if (BuildConfig.DEBUG) {           // 这两行必须写在init之前，否则这些配置在init过程中将无效
            ARouter.openLog()     // 打印日志
            ARouter.openDebug()   // 开启调试模式(如果在InstantRun模式下运行，必须开启调试模式！线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(instance)

        /**
         *  推荐在Application中进行全局配置缺省页, 当然同样每个页面可以单独指定缺省页.
         *  具体查看 https://github.com/liangjingkanji/StateLayout
         */
        StateConfig.apply {
            emptyLayout = R.layout.layout_empty
            errorLayout = R.layout.layout_error
            loadingLayout = R.layout.layout_loading
            setRetryIds(R.id.msg)
            onLoading {
                // 此生命周期可以拿到LoadingLayout创建的视图对象, 可以进行动画设置或点击事件.
            }
        }


        SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
            MaterialHeader(context)

        }
        SmartRefreshLayout.setDefaultRefreshFooterCreator { context, layout ->
            ClassicsFooter(context)
        }
        var root = MMKV.initialize(this)


    }


}